﻿/**
 * jQuery EasyUI 1.3.6
 * 
 * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.
 *
 * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt
 * To use it on other terms please contact us at info@jeasyui.com
 *
 */
(function ($) {
    function _1(_2, _3) {
        var _4 = $.data(_2, "combo");
        var _5 = _4.options;
        var _6 = _4.combo;
        var _7 = _4.panel;
        if (_3) {
            _5.width = _3;
        }
        if (isNaN(_5.width)) {
            var c = $(_2).clone();
            c.css("visibility", "hidden");
            c.appendTo("body");
            _5.width = c.outerWidth();
            c.remove();
        }
        _6.appendTo("body");
        var _8 = _6.find("input.combo-text");
        var _9 = _6.find(".combo-arrow");
        var _a = _5.hasDownArrow ? _9._outerWidth() : 0;
        _6._outerWidth(_5.width)._outerHeight(_5.height);
        _8._outerWidth(_6.width() - _a);
        _8.css({ height: _6.height() + "px", lineHeight: _6.height() + "px" });
        _9._outerHeight(_6.height());
        _7.panel("resize", { width: (_5.panelWidth ? _5.panelWidth : _6.outerWidth()), height: _5.panelHeight });
        _6.insertAfter(_2);
    };
    function _b(_c) {
        $(_c).addClass("combo-f").hide();
        var _d = $("<span class=\"combo\">" + "<input type=\"text\" class=\"combo-text\" autocomplete=\"off\">" + "<span><span class=\"combo-arrow\"></span></span>" + "<input type=\"hidden\" class=\"combo-value\">" + "</span>").insertAfter(_c);
        var _e = $("<div class=\"combo-panel\"></div>").appendTo("body");
        _e.panel({
            doSize: false, closed: true, cls: "combo-p", style: { position: "absolute", zIndex: 10 }, onOpen: function () {
                var p = $(this).panel("panel");
                if ($.fn.menu) {
                    p.css("z-index", $.fn.menu.defaults.zIndex++);
                } else {
                    if ($.fn.window) {
                        p.css("z-index", $.fn.window.defaults.zIndex++);
                    }
                }
                $(this).panel("resize");
            }, onBeforeClose: function () {
                _1c(this);
            }, onClose: function () {
                var _f = $.data(_c, "combo");
                if (_f) {
                    _f.options.onHidePanel.call(_c);
                }
            }
        });
        var _10 = $(_c).attr("name");
        if (_10) {
            _d.find("input.combo-value").attr("name", _10);
            $(_c).removeAttr("name").attr("comboName", _10);
        }
        return { combo: _d, panel: _e };
    };
    function _11(_12) {
        var _13 = $.data(_12, "combo");
        var _14 = _13.options;
        var _15 = _13.combo;
        if (_14.hasDownArrow) {
            _15.find(".combo-arrow").show();
        } else {
            _15.find(".combo-arrow").hide();
        }
        _16(_12, _14.disabled);
        _17(_12, _14.readonly);
    };
    function _18(_19) {
        var _1a = $.data(_19, "combo");
        var _1b = _1a.combo.find("input.combo-text");
        _1b.validatebox("destroy");
        _1a.panel.panel("destroy");
        _1a.combo.remove();
        $(_19).remove();
    };
    function _1c(_1d) {
        $(_1d).find(".combo-f").each(function () {
            var p = $(this).combo("panel");
            if (p.is(":visible")) {
                p.panel("close");
            }
        });
    };
    function _1e(_1f) {
        var _20 = $.data(_1f, "combo");
        var _21 = _20.options;
        var _22 = _20.panel;
        var _23 = _20.combo;
        var _24 = _23.find(".combo-text");
        var _25 = _23.find(".combo-arrow");
        $(document).unbind(".combo").bind("mousedown.combo", function (e) {
            var p = $(e.target).closest("span.combo,div.combo-p");
            if (p.length) {
                _1c(p);
                return;
            }
            $("body>div.combo-p>div.combo-panel:visible").panel("close");
        });
        _24.unbind(".combo");
        _25.unbind(".combo");
        if (!_21.disabled && !_21.readonly) {
            _24.bind("click.combo", function (e) {
                if (!_21.editable) {
                    _26.call(this);
                } else {
                    var p = $(this).closest("div.combo-panel");
                    $("div.combo-panel:visible").not(_22).not(p).panel("close");
                }
            }).bind("keydown.combo paste.combo drop.combo", function (e) {
                switch (e.keyCode) {
                    case 38:
                        _21.keyHandler.up.call(_1f, e);
                        break;
                    case 40:
                        _21.keyHandler.down.call(_1f, e);
                        break;
                    case 37:
                        _21.keyHandler.left.call(_1f, e);
                        break;
                    case 39:
                        _21.keyHandler.right.call(_1f, e);
                        break;
                    case 13:
                        e.preventDefault();
                        _21.keyHandler.enter.call(_1f, e);
                        return false;
                    case 9:
                    case 27:
                        _27(_1f);
                        break;
                    default:
                        if (_21.editable) {
                            if (_20.timer) {
                                clearTimeout(_20.timer);
                            }
                            _20.timer = setTimeout(function () {
                                var q = _24.val();
                                if (_20.previousValue != q) {
                                    _20.previousValue = q;
                                    $(_1f).combo("showPanel");
                                    _21.keyHandler.query.call(_1f, _24.val(), e);
                                    $(_1f).combo("validate");
                                }
                            }, _21.delay);
                        }
                }
            });
            _25.bind("click.combo", function () {
                _26.call(this);
            }).bind("mouseenter.combo", function () {
                $(this).addClass("combo-arrow-hover");
            }).bind("mouseleave.combo", function () {
                $(this).removeClass("combo-arrow-hover");
            });
        }
        function _26() {
            if (_22.is(":visible")) {
                _27(_1f);
            } else {
                var p = $(this).closest("div.combo-panel");
                $("div.combo-panel:visible").not(_22).not(p).panel("close");
                $(_1f).combo("showPanel");
            }
            _24.focus();
        };
    };
    function _28(_29) {
        var _2a = $.data(_29, "combo");
        var _2b = _2a.options;
        var _2c = _2a.combo;
        var _2d = _2a.panel;
        _2d.panel("move", { left: _2e(), top: _2f() });
        if (_2d.panel("options").closed) {
            _2d.panel("open");
            _2b.onShowPanel.call(_29);
        }
        (function () {
            if (_2d.is(":visible")) {
                _2d.panel("move", { left: _2e(), top: _2f() });
                setTimeout(arguments.callee, 200);
            }
        })();
        function _2e() {
            var _30 = _2c.offset().left;
            if (_2b.panelAlign == "right") {
                _30 += _2c._outerWidth() - _2d._outerWidth();
            }
            if (_30 + _2d._outerWidth() > $(window)._outerWidth() + $(document).scrollLeft()) {
                _30 = $(window)._outerWidth() + $(document).scrollLeft() - _2d._outerWidth();
            }
            if (_30 < 0) {
                _30 = 0;
            }
            return _30;
        };
        function _2f() {
            var top = _2c.offset().top + _2c._outerHeight();
            if (top + _2d._outerHeight() > $(window)._outerHeight() + $(document).scrollTop()) {
                top = _2c.offset().top - _2d._outerHeight();
            }
            if (top < $(document).scrollTop()) {
                top = _2c.offset().top + _2c._outerHeight();
            }
            return top;
        };
    };
    function _27(_31) {
        var _32 = $.data(_31, "combo").panel;
        _32.panel("close");
    };
    function _33(_34) {
        var _35 = $.data(_34, "combo").options;
        var _36 = $(_34).combo("textbox");
        _36.validatebox($.extend({}, _35, { deltaX: (_35.hasDownArrow ? _35.deltaX : (_35.deltaX > 0 ? 1 : -1)) }));
    };
    function _16(_37, _38) {
        var _39 = $.data(_37, "combo");
        var _3a = _39.options;
        var _3b = _39.combo;
        if (_38) {
            _3a.disabled = true;
            $(_37).attr("disabled", true);
            _3b.find(".combo-value").attr("disabled", true);
            _3b.find(".combo-text").attr("disabled", true);
        } else {
            _3a.disabled = false;
            $(_37).removeAttr("disabled");
            _3b.find(".combo-value").removeAttr("disabled");
            _3b.find(".combo-text").removeAttr("disabled");
        }
    };
    function _17(_3c, _3d) {
        var _3e = $.data(_3c, "combo");
        var _3f = _3e.options;
        _3f.readonly = _3d == undefined ? true : _3d;
        var _40 = _3f.readonly ? true : (!_3f.editable);
        _3e.combo.find(".combo-text").attr("readonly", _40).css("cursor", _40 ? "pointer" : "");
    };
    function _41(target) {
        var state = $.data(target, "combo");
        var opts = state.options;
        var combo = state.combo;
        if (opts.multiple) {
            combo.find("input.combo-value").remove();
        } else {
            combo.find("input.combo-value").val("");
        }
        combo.find("input.combo-text").val("");
    };
    function _46(_47) {
        var _48 = $.data(_47, "combo").combo;
        return _48.find("input.combo-text").val();
    };
    function _49(_4a, _4b) {
        var _4c = $.data(_4a, "combo");
        var _4d = _4c.combo.find("input.combo-text");
        if (_4d.val() != _4b) {
            _4d.val(_4b);
            $(_4a).combo("validate");
            _4c.previousValue = _4b;
        }
    };
    function _4e(_4f) {
        var _50 = [];
        var _51 = $.data(_4f, "combo").combo;
        _51.find("input.combo-value").each(function () {
            _50.push($(this).val());
        });
        return _50;
    };
    function _52(target, values) {
        var opts = $.data(target, "combo").options;
        var oldVals = _4e(target);
        var combo = $.data(target, "combo").combo;
        combo.find("input.combo-value").remove();
        var comboName = $(target).attr("comboName");
        for (var i = 0; i < values.length; i++) {
            var comboValue = $("<input type=\"hidden\" class=\"combo-value\">").appendTo(combo);
            if (comboName) {
                comboValue.attr("name", comboName);
            }
            comboValue.val(values[i]);
        }
        var tmp = [];
        for (var i = 0; i < oldVals.length; i++) {
            tmp[i] = oldVals[i];
        }
        var aa = [];
        for (var i = 0; i < values.length; i++) {
            for (var j = 0; j < tmp.length; j++) {
                if (values[i] == tmp[j]) {
                    aa.push(values[i]);
                    tmp.splice(j, 1);
                    break;
                }
            }
        }
        if (aa.length != values.length || values.length != oldVals.length) {
            if (opts.multiple) {
                opts.onChange.call(target, values, oldVals);
            } else {
                opts.onChange.call(target, values[0], oldVals[0]);
            }
        }
    };
    function _5a(_5b) {
        var _5c = _4e(_5b);
        return _5c[0];
    };
    function _5d(_5e, _5f) {
        _52(_5e, [_5f]);
    };
    function _60(_61) {
        var _62 = $.data(_61, "combo").options;
        var fn = _62.onChange;
        _62.onChange = function () {
        };
        if (_62.multiple) {
            if (_62.value) {
                if (typeof _62.value == "object") {
                    _52(_61, _62.value);
                } else {
                    _5d(_61, _62.value);
                }
            } else {
                _52(_61, []);
            }
            _62.originalValue = _4e(_61);
        } else {
            _5d(_61, _62.value);
            _62.originalValue = _62.value;
        }
        _62.onChange = fn;
    };
    $.fn.combo = function (_63, _64) {
        if (typeof _63 == "string") {
            var _65 = $.fn.combo.methods[_63];
            if (_65) {
                return _65(this, _64);
            } else {
                return this.each(function () {
                    var _66 = $(this).combo("textbox");
                    _66.validatebox(_63, _64);
                });
            }
        }
        _63 = _63 || {};
        return this.each(function () {
            var _67 = $.data(this, "combo");
            if (_67) {
                $.extend(_67.options, _63);
            } else {
                var r = _b(this);
                _67 = $.data(this, "combo", { options: $.extend({}, $.fn.combo.defaults, $.fn.combo.parseOptions(this), _63), combo: r.combo, panel: r.panel, previousValue: null });
                $(this).removeAttr("disabled");
            }
            _11(this);
            _1(this);
            _1e(this);
            _33(this);
            _60(this);
        });
    };
    $.fn.combo.methods = {
        options: function (jq) {
            return $.data(jq[0], "combo").options;
        }, panel: function (jq) {
            return $.data(jq[0], "combo").panel;
        }, textbox: function (jq) {
            return $.data(jq[0], "combo").combo.find("input.combo-text");
        }, destroy: function (jq) {
            return jq.each(function () {
                _18(this);
            });
        }, resize: function (jq, _68) {
            return jq.each(function () {
                _1(this, _68);
            });
        }, showPanel: function (jq) {
            return jq.each(function () {
                _28(this);
            });
        }, hidePanel: function (jq) {
            return jq.each(function () {
                _27(this);
            });
        }, disable: function (jq) {
            return jq.each(function () {
                _16(this, true);
                _1e(this);
            });
        }, enable: function (jq) {
            return jq.each(function () {
                _16(this, false);
                _1e(this);
            });
        }, readonly: function (jq, _69) {
            return jq.each(function () {
                _17(this, _69);
                _1e(this);
            });
        }, isValid: function (jq) {
            var _6a = $.data(jq[0], "combo").combo.find("input.combo-text");
            return _6a.validatebox("isValid");
        }, clear: function (jq) {
            return jq.each(function () {
                _41(this);
            });
        }, reset: function (jq) {
            return jq.each(function () {
                var _6b = $.data(this, "combo").options;
                if (_6b.multiple) {
                    $(this).combo("setValues", _6b.originalValue);
                } else {
                    $(this).combo("setValue", _6b.originalValue);
                }
            });
        }, getText: function (jq) {
            return _46(jq[0]);
        }, setText: function (jq, _6c) {
            return jq.each(function () {
                _49(this, _6c);
            });
        }, getValues: function (jq) {
            return _4e(jq[0]);
        }, setValues: function (jq, _6d) {
            return jq.each(function () {
                _52(this, _6d);
            });
        }, getValue: function (jq) {
            return _5a(jq[0]);
        }, setValue: function (jq, _6e) {
            return jq.each(function () {
                _5d(this, _6e);
            });
        }
    };
    $.fn.combo.parseOptions = function (_6f) {
        var t = $(_6f);
        return $.extend({}, $.fn.validatebox.parseOptions(_6f), $.parser.parseOptions(_6f, ["width", "height", "separator", "panelAlign", { panelWidth: "number", editable: "boolean", hasDownArrow: "boolean", delay: "number", selectOnNavigation: "boolean" }]), { panelHeight: (t.attr("panelHeight") == "auto" ? "auto" : parseInt(t.attr("panelHeight")) || undefined), multiple: (t.attr("multiple") ? true : undefined), disabled: (t.attr("disabled") ? true : undefined), readonly: (t.attr("readonly") ? true : undefined), value: (t.val() || undefined) });
    };
    $.fn.combo.defaults = $.extend({}, $.fn.validatebox.defaults, {
        width: "auto", height: 22, panelWidth: null, panelHeight: 200, panelAlign: "left", multiple: false, selectOnNavigation: true, separator: ",", editable: true, disabled: false, readonly: false, hasDownArrow: true, value: "", delay: 200, deltaX: 19, keyHandler: {
            up: function (e) {
            }, down: function (e) {
            }, left: function (e) {
            }, right: function (e) {
            }, enter: function (e) {
            }, query: function (q, e) {
            }
        }, onShowPanel: function () {
        }, onHidePanel: function () {
        }, onChange: function (_70, _71) {
        }
    });
})(jQuery);

